<?php

/**
 * 本脚本分四部分：
 * - HHO 默认配置
 * - 两个HHO系统常量的定义
 * - 加载核心基础类
 * - 实例化 HHO 类，开始处理并响应请求
 */
function HHO_CONFIG() {
	/**
	 * HHO 中各项配置的默认值，因此该脚本中的各项配置均不能缺少
	 *
	 * INIT：仅在初始化HHO时起作用，此类配置通常在 HHO 初始化完成后，再次调用 HHO::config() 方法修改其值将不再起作用或将导致 HHO 异常
	 * EXEC：在应用程序执行过程中的任何时候均可调用 HHO::config() 方法修改其值，且新值将在其后的运行中起作用
	 *
	 * 其中的路径配置若没有特别说明均为绝对路径，通常可引用 HHO_PATH、HHO_APP_PATH 两个常量的值，分别为 HHO 的根目录和应用程序的根目录
	 */
	$config = [];
	
	$config['timezone'] = 'PRC'; // INIT，设置时区
	$config['session'] = TRUE; // INIT，设置是否启用 SESSION
	$config['dsn'] = ['demo' => ['mysql:host=localhost;port=3306;dbname=demo;', 'root', 'root', 'utf8', 0]]; // EXEC，数据库连接参数，第五个参数为连接超时时间（秒）
	$config['tick'] = '-/'; // EXEC，即PATHINFO中的分隔符列表，且第一个字符还被HHO用于组装URL（见 Core\Ext::url()），默认的“/”在一些情况下工作不正常，比如一个变量值为空时，PATHINFO中将出现“//”这样的两个连续“/”字符，但服务器收到后，PATHINFO中连续多个“/”将被替换为一个“/”
	$config['debug'] = FALSE; // EXEC，是否为调试模式，为调试模式时，若出现错误，则显示错误信息（前提是 php.ini|display_errors=On）。建议在生产环境中设置为 FALSE，错误信息将保存至日志文件中
	$config['controller.default'] = 'Index'; // INIT，若请求中未指定控制器，则一律请求默认控制器
	$config['controller.void'] = 'Void'; // EXEC，未找到请求的控制器时，一律请求空控制器
	$config['controller.root'] = HHO_APP_PATH . '/Controller'; // EXEC，当前应用程序中控制器类文件所存放的路径描述，必须为一个绝对目录
	$config['action.default'] = 'Index'; // INIT，控制器中的缺省操作（方法）名称，若请求中未指定操作，则一律执行该操作
	$config['model.root'] = HHO_APP_PATH . '/Model'; // EXEC，当前应用程序的模型类文件所存放的路径描述，必须为一个绝对目录
	$config['dao.root'] = HHO_APP_PATH . '/Dao'; // EXEC，当前应用程序数据持久层的类文件所存放的路径描述，必须为一个绝对目录
	$config['view.root'] = HHO_APP_PATH . '/View'; // EXEC，当前应用程序的视图相关文件所存放的路径描述，必须为一个绝对目录
	$config['view.default'] = 'Default'; // EXEC，应用程序的默认模板
	$config['rewrite'] = TRUE; // INIT，是否开启“PATHINFO重写”功能
	$config['runtime.root'] = HHO_APP_PATH . '/Runtime'; // EXEC，当前应用程序运行过程中产生的缓存文件或临时文件等所存放的路径描述，必须为一个绝对目录
	$config['error.log'] = 1; // EXEC，是否记录错误日志，以及如何记录，0：不记录，1：写入系统日志（如Apache日志），2：写入指定日志文件，3：同时写入系统日志和指定日志文件
	$config['error.file'] = HHO_APP_PATH . '/Runtime/error.log'; // EXEC，记录错误日志的文件描述
	$config['404.html'] = NULL; // EXEC，应用程序中的 HTTP 404 错误页面，允许为 PHP 脚本页面
	$config['mcsn'] = ['apc' => ['driver' => 'apc', 'prefix' => 'HHO:APC:'], 'main' => ['driver' => 'redis', 'host' => 'localhost', 'port' => '6379', 'db' => 0, 'prefix' => '']]; // EXEC，Memory Cache Source Name，应用程序的数据缓存方式定义，如果有的话
	
	return $config;
}

const HHO_PATH = __DIR__;

require HHO_PATH . '/Core/HHO.php';
require HHO_PATH . '/Core/Error.php';

require HHO_APP_PATH . '/Config/HHO.php';

Core\HHO::init();